数组的逆序对
思想：归并排序的思想《将数组拆分，然后将拆分的小数组一一合并
class Solution {
public:
    int mergesort(int l,int r,vector<int>& v,vector<int>& data)
    {
        int count=0;
        if(l>=r)
            return 0;
        int m=(l+r)/2;
        //拆分
        count=mergesort(l,m,v,data)+mergesort(m+1,r,v,data);
        //将左右矩阵的数据都拷贝到新数组中，方便接下来排序
        for(int k=l;k<=r;k++)
        {
            v[k]=data[k];
        }
        int i=l,j=m+1;
        //排序统计
        for(int k=l;k<=r;k++)
        {
            if(i==m+1)
                data[k]=v[j++];
            else if(j==r+1||v[i]<=v[j])
                data[k]=v[i++];
            else
            {
                data[k]=v[j++];
                count=(count+m-i+1)%1000000007;
            }
        }
        return count;
    }
    int InversePairs(vector<int> data) {
        vector<int> v(data.size());
        return mergesort(0,data.size()-1,v,data);
    }
};
2、丑数，也就是因子只包含2，3，5
思想：利用3个指针即可，因为任意一个丑数一定是由前面的丑数*2，*3，*5得到的。
class Solution {
public:
    int GetUglyNumber_Solution(int index) {
         if(index<=0)
             return 0;
        vector<int> v(index,0);
        v[0]=1;
        int t2=0,t3=0,t5=0;
        for(int i=1;i<index;i++)
        {
            int tmp=min(v[t2]*2,min(v[t3]*3,v[t5]*5));
            if(tmp==v[t2]*2)
                t2++;
            if(tmp==v[t3]*3)
                t3++;
            if(tmp==v[t5]*5)
                t5++;
            v[i]=tmp;
        }
        return v[index-1];
    }
};